home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2000 March / maximum-cd-2000-03.iso / Quake3 Game Source / Q3AGameSource.exe / Main / ui_cinematics.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-18  |  11.7 KB  |  331 lines

  1. // Copyright (C) 1999-2000 Id Software, Inc.
  2. //
  3. #include "ui_local.h"
  4.  
  5.  
  6. #define ART_BACK0        "menu/art/back_0"
  7. #define ART_BACK1        "menu/art/back_1"    
  8. #define ART_FRAMEL        "menu/art/frame2_l"
  9. #define ART_FRAMER        "menu/art/frame1_r"
  10.  
  11. #define VERTICAL_SPACING    30
  12.  
  13. #define ID_BACK            10
  14. #define ID_CIN_IDLOGO    11
  15. #define ID_CIN_INTRO    12
  16. #define ID_CIN_TIER1    13
  17. #define ID_CIN_TIER2    14
  18. #define ID_CIN_TIER3    15
  19. #define ID_CIN_TIER4    16
  20. #define ID_CIN_TIER5    17
  21. #define ID_CIN_TIER6    18
  22. #define ID_CIN_TIER7    19
  23. #define ID_CIN_END        20
  24.  
  25.  
  26. typedef struct {
  27.     menuframework_s    menu;
  28.     menutext_s        banner;
  29.     menubitmap_s    framel;
  30.     menubitmap_s    framer;
  31.     menutext_s        cin_idlogo;
  32.     menutext_s        cin_intro;
  33.     menutext_s        cin_tier1;
  34.     menutext_s        cin_tier2;
  35.     menutext_s        cin_tier3;
  36.     menutext_s        cin_tier4;
  37.     menutext_s        cin_tier5;
  38.     menutext_s        cin_tier6;
  39.     menutext_s        cin_tier7;
  40.     menutext_s        cin_end;
  41.     menubitmap_s    back;
  42. } cinematicsMenuInfo_t;
  43.  
  44. static cinematicsMenuInfo_t    cinematicsMenuInfo;
  45.  
  46. static char *cinematics[] = {
  47.     "idlogo",
  48.     "intro",
  49.     "tier1",
  50.     "tier2",
  51.     "tier3",
  52.     "tier4",
  53.     "tier5",
  54.     "tier6",
  55.     "tier7",
  56.     "end"
  57. };
  58.  
  59. /*
  60. ===============
  61. UI_CinematicsMenu_BackEvent
  62. ===============
  63. */
  64. static void UI_CinematicsMenu_BackEvent( void *ptr, int event ) {
  65.     if( event != QM_ACTIVATED ) {
  66.         return;
  67.     }
  68.     UI_PopMenu();
  69. }
  70.  
  71.  
  72. /*
  73. ===============
  74. UI_CinematicsMenu_Event
  75. ===============
  76. */
  77. static void UI_CinematicsMenu_Event( void *ptr, int event ) {
  78.     int        n;
  79.  
  80.     if (event != QM_ACTIVATED)
  81.         return;
  82.  
  83.     n = ((menucommon_s*)ptr)->id - ID_CIN_IDLOGO;
  84.     trap_Cvar_Set( "nextmap", va( "ui_cinematics %i", n ) );
  85.     if( uis.demoversion && ((menucommon_s*)ptr)->id == ID_CIN_END ) {
  86.         trap_Cmd_ExecuteText( EXEC_APPEND, "disconnect; cinematic demoEnd.RoQ 1\n" );
  87.     }
  88.     else {
  89.         trap_Cmd_ExecuteText( EXEC_APPEND, va( "disconnect; cinematic %s.RoQ\n", cinematics[n] ) );
  90.     }
  91. }
  92.  
  93.  
  94. /*
  95. ===============
  96. UI_CinematicsMenu_Init
  97. ===============
  98. */
  99. static void UI_CinematicsMenu_Init( void ) {
  100.     int        y;
  101.  
  102.     UI_CinematicsMenu_Cache();
  103.  
  104.     memset( &cinematicsMenuInfo, 0, sizeof(cinematicsMenuInfo) );
  105.     cinematicsMenuInfo.menu.fullscreen = qtrue;
  106.  
  107.     cinematicsMenuInfo.banner.generic.type        = MTYPE_BTEXT;
  108.     cinematicsMenuInfo.banner.generic.x            = 320;
  109.     cinematicsMenuInfo.banner.generic.y            = 16;
  110.     cinematicsMenuInfo.banner.string            = "CINEMATICS";
  111.     cinematicsMenuInfo.banner.color                = color_white;
  112.     cinematicsMenuInfo.banner.style                = UI_CENTER;
  113.  
  114.     cinematicsMenuInfo.framel.generic.type        = MTYPE_BITMAP;
  115.     cinematicsMenuInfo.framel.generic.name        = ART_FRAMEL;
  116.     cinematicsMenuInfo.framel.generic.flags        = QMF_INACTIVE;
  117.     cinematicsMenuInfo.framel.generic.x            = 0;  
  118.     cinematicsMenuInfo.framel.generic.y            = 78;
  119.     cinematicsMenuInfo.framel.width              = 256;
  120.     cinematicsMenuInfo.framel.height              = 329;
  121.  
  122.     cinematicsMenuInfo.framer.generic.type        = MTYPE_BITMAP;
  123.     cinematicsMenuInfo.framer.generic.name        = ART_FRAMER;
  124.     cinematicsMenuInfo.framer.generic.flags        = QMF_INACTIVE;
  125.     cinematicsMenuInfo.framer.generic.x            = 376;
  126.     cinematicsMenuInfo.framer.generic.y            = 76;
  127.     cinematicsMenuInfo.framer.width              = 256;
  128.     cinematicsMenuInfo.framer.height              = 334;
  129.  
  130.     y = 100;
  131.     cinematicsMenuInfo.cin_idlogo.generic.type        = MTYPE_PTEXT;
  132.     cinematicsMenuInfo.cin_idlogo.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  133.     cinematicsMenuInfo.cin_idlogo.generic.x            = 320;
  134.     cinematicsMenuInfo.cin_idlogo.generic.y            = y;
  135.     cinematicsMenuInfo.cin_idlogo.generic.id        = ID_CIN_IDLOGO;
  136.     cinematicsMenuInfo.cin_idlogo.generic.callback    = UI_CinematicsMenu_Event; 
  137.     cinematicsMenuInfo.cin_idlogo.string            = "ID LOGO";
  138.     cinematicsMenuInfo.cin_idlogo.color                = color_red;
  139.     cinematicsMenuInfo.cin_idlogo.style                = UI_CENTER;
  140.  
  141.     y += VERTICAL_SPACING;
  142.     cinematicsMenuInfo.cin_intro.generic.type        = MTYPE_PTEXT;
  143.     cinematicsMenuInfo.cin_intro.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  144.     cinematicsMenuInfo.cin_intro.generic.x            = 320;
  145.     cinematicsMenuInfo.cin_intro.generic.y            = y;
  146.     cinematicsMenuInfo.cin_intro.generic.id            = ID_CIN_INTRO;
  147.     cinematicsMenuInfo.cin_intro.generic.callback    = UI_CinematicsMenu_Event; 
  148.     cinematicsMenuInfo.cin_intro.string                = "INTRO";
  149.     cinematicsMenuInfo.cin_intro.color                = color_red;
  150.     cinematicsMenuInfo.cin_intro.style                = UI_CENTER;
  151.     if( uis.demoversion ) {
  152.         cinematicsMenuInfo.cin_intro.generic.flags |= QMF_GRAYED;
  153.     }
  154.  
  155.     y += VERTICAL_SPACING;
  156.     cinematicsMenuInfo.cin_tier1.generic.type        = MTYPE_PTEXT;
  157.     cinematicsMenuInfo.cin_tier1.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  158.     cinematicsMenuInfo.cin_tier1.generic.x            = 320;
  159.     cinematicsMenuInfo.cin_tier1.generic.y            = y;
  160.     cinematicsMenuInfo.cin_tier1.generic.id            = ID_CIN_TIER1;
  161.     cinematicsMenuInfo.cin_tier1.generic.callback    = UI_CinematicsMenu_Event; 
  162.     cinematicsMenuInfo.cin_tier1.string                = "Tier 1";
  163.     cinematicsMenuInfo.cin_tier1.color                = color_red;
  164.     cinematicsMenuInfo.cin_tier1.style                = UI_CENTER;
  165.     if( !UI_CanShowTierVideo( 1 ) ) {
  166.         cinematicsMenuInfo.cin_tier1.generic.flags |= QMF_GRAYED;
  167.     }
  168.  
  169.     y += VERTICAL_SPACING;
  170.     cinematicsMenuInfo.cin_tier2.generic.type        = MTYPE_PTEXT;
  171.     cinematicsMenuInfo.cin_tier2.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  172.     cinematicsMenuInfo.cin_tier2.generic.x            = 320;
  173.     cinematicsMenuInfo.cin_tier2.generic.y            = y;
  174.     cinematicsMenuInfo.cin_tier2.generic.id            = ID_CIN_TIER2;
  175.     cinematicsMenuInfo.cin_tier2.generic.callback    = UI_CinematicsMenu_Event; 
  176.     cinematicsMenuInfo.cin_tier2.string                = "Tier 2";
  177.     cinematicsMenuInfo.cin_tier2.color                = color_red;
  178.     cinematicsMenuInfo.cin_tier2.style                = UI_CENTER;
  179.     if( !UI_CanShowTierVideo( 2 ) ) {
  180.         cinematicsMenuInfo.cin_tier2.generic.flags |= QMF_GRAYED;
  181.     }
  182.  
  183.     y += VERTICAL_SPACING;
  184.     cinematicsMenuInfo.cin_tier3.generic.type        = MTYPE_PTEXT;
  185.     cinematicsMenuInfo.cin_tier3.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  186.     cinematicsMenuInfo.cin_tier3.generic.x            = 320;
  187.     cinematicsMenuInfo.cin_tier3.generic.y            = y;
  188.     cinematicsMenuInfo.cin_tier3.generic.id            = ID_CIN_TIER3;
  189.     cinematicsMenuInfo.cin_tier3.generic.callback    = UI_CinematicsMenu_Event; 
  190.     cinematicsMenuInfo.cin_tier3.string                = "Tier 3";
  191.     cinematicsMenuInfo.cin_tier3.color                = color_red;
  192.     cinematicsMenuInfo.cin_tier3.style                = UI_CENTER;
  193.     if( !UI_CanShowTierVideo( 3 ) ) {
  194.         cinematicsMenuInfo.cin_tier3.generic.flags |= QMF_GRAYED;
  195.     }
  196.  
  197.     y += VERTICAL_SPACING;
  198.     cinematicsMenuInfo.cin_tier4.generic.type        = MTYPE_PTEXT;
  199.     cinematicsMenuInfo.cin_tier4.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  200.     cinematicsMenuInfo.cin_tier4.generic.x            = 320;
  201.     cinematicsMenuInfo.cin_tier4.generic.y            = y;
  202.     cinematicsMenuInfo.cin_tier4.generic.id            = ID_CIN_TIER4;
  203.     cinematicsMenuInfo.cin_tier4.generic.callback    = UI_CinematicsMenu_Event; 
  204.     cinematicsMenuInfo.cin_tier4.string                = "Tier 4";
  205.     cinematicsMenuInfo.cin_tier4.color                = color_red;
  206.     cinematicsMenuInfo.cin_tier4.style                = UI_CENTER;
  207.     if( !UI_CanShowTierVideo( 4 ) ) {
  208.         cinematicsMenuInfo.cin_tier4.generic.flags |= QMF_GRAYED;
  209.     }
  210.  
  211.     y += VERTICAL_SPACING;
  212.     cinematicsMenuInfo.cin_tier5.generic.type        = MTYPE_PTEXT;
  213.     cinematicsMenuInfo.cin_tier5.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  214.     cinematicsMenuInfo.cin_tier5.generic.x            = 320;
  215.     cinematicsMenuInfo.cin_tier5.generic.y            = y;
  216.     cinematicsMenuInfo.cin_tier5.generic.id            = ID_CIN_TIER5;
  217.     cinematicsMenuInfo.cin_tier5.generic.callback    = UI_CinematicsMenu_Event; 
  218.     cinematicsMenuInfo.cin_tier5.string                = "Tier 5";
  219.     cinematicsMenuInfo.cin_tier5.color                = color_red;
  220.     cinematicsMenuInfo.cin_tier5.style                = UI_CENTER;
  221.     if( !UI_CanShowTierVideo( 5 ) ) {
  222.         cinematicsMenuInfo.cin_tier5.generic.flags |= QMF_GRAYED;
  223.     }
  224.  
  225.     y += VERTICAL_SPACING;
  226.     cinematicsMenuInfo.cin_tier6.generic.type        = MTYPE_PTEXT;
  227.     cinematicsMenuInfo.cin_tier6.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  228.     cinematicsMenuInfo.cin_tier6.generic.x            = 320;
  229.     cinematicsMenuInfo.cin_tier6.generic.y            = y;
  230.     cinematicsMenuInfo.cin_tier6.generic.id            = ID_CIN_TIER6;
  231.     cinematicsMenuInfo.cin_tier6.generic.callback    = UI_CinematicsMenu_Event; 
  232.     cinematicsMenuInfo.cin_tier6.string                = "Tier 6";
  233.     cinematicsMenuInfo.cin_tier6.color                = color_red;
  234.     cinematicsMenuInfo.cin_tier6.style                = UI_CENTER;
  235.     if( !UI_CanShowTierVideo( 6 ) ) {
  236.         cinematicsMenuInfo.cin_tier6.generic.flags |= QMF_GRAYED;
  237.     }
  238.  
  239.     y += VERTICAL_SPACING;
  240.     cinematicsMenuInfo.cin_tier7.generic.type        = MTYPE_PTEXT;
  241.     cinematicsMenuInfo.cin_tier7.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  242.     cinematicsMenuInfo.cin_tier7.generic.x            = 320;
  243.     cinematicsMenuInfo.cin_tier7.generic.y            = y;
  244.     cinematicsMenuInfo.cin_tier7.generic.id            = ID_CIN_TIER7;
  245.     cinematicsMenuInfo.cin_tier7.generic.callback    = UI_CinematicsMenu_Event; 
  246.     cinematicsMenuInfo.cin_tier7.string                = "Tier 7";
  247.     cinematicsMenuInfo.cin_tier7.color                = color_red;
  248.     cinematicsMenuInfo.cin_tier7.style                = UI_CENTER;
  249.     if( !UI_CanShowTierVideo( 7 ) ) {
  250.         cinematicsMenuInfo.cin_tier7.generic.flags |= QMF_GRAYED;
  251.     }
  252.  
  253.     y += VERTICAL_SPACING;
  254.     cinematicsMenuInfo.cin_end.generic.type            = MTYPE_PTEXT;
  255.     cinematicsMenuInfo.cin_end.generic.flags        = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
  256.     cinematicsMenuInfo.cin_end.generic.x            = 320;
  257.     cinematicsMenuInfo.cin_end.generic.y            = y;
  258.     cinematicsMenuInfo.cin_end.generic.id            = ID_CIN_END;
  259.     cinematicsMenuInfo.cin_end.generic.callback        = UI_CinematicsMenu_Event; 
  260.     cinematicsMenuInfo.cin_end.string                = "END";
  261.     cinematicsMenuInfo.cin_end.color                = color_red;
  262.     cinematicsMenuInfo.cin_end.style                = UI_CENTER;
  263.     if( !UI_CanShowTierVideo( 8 ) ) {
  264.         cinematicsMenuInfo.cin_end.generic.flags |= QMF_GRAYED;
  265.     }
  266.  
  267.     cinematicsMenuInfo.back.generic.type        = MTYPE_BITMAP;
  268.     cinematicsMenuInfo.back.generic.name        = ART_BACK0;
  269.     cinematicsMenuInfo.back.generic.flags        = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
  270.     cinematicsMenuInfo.back.generic.id            = ID_BACK;
  271.     cinematicsMenuInfo.back.generic.callback    = UI_CinematicsMenu_BackEvent;
  272.     cinematicsMenuInfo.back.generic.x            = 0;
  273.     cinematicsMenuInfo.back.generic.y            = 480-64;
  274.     cinematicsMenuInfo.back.width                = 128;
  275.     cinematicsMenuInfo.back.height                = 64;
  276.     cinematicsMenuInfo.back.focuspic            = ART_BACK1;
  277.  
  278.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.banner );
  279.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.framel );
  280.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.framer );
  281.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_idlogo );
  282.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_intro );
  283.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier1 );
  284.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier2 );
  285.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier3 );
  286.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier4 );
  287.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier5 );
  288.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier6 );
  289.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_tier7 );
  290.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.cin_end );
  291.     Menu_AddItem( &cinematicsMenuInfo.menu, &cinematicsMenuInfo.back );
  292. }
  293.  
  294.  
  295. /*
  296. =================
  297. UI_CinematicsMenu_Cache
  298. =================
  299. */
  300. void UI_CinematicsMenu_Cache( void ) {
  301.     trap_R_RegisterShaderNoMip( ART_BACK0 );
  302.     trap_R_RegisterShaderNoMip( ART_BACK1 );
  303.     trap_R_RegisterShaderNoMip( ART_FRAMEL );
  304.     trap_R_RegisterShaderNoMip( ART_FRAMER );
  305. }
  306.  
  307.  
  308. /*
  309. ===============
  310. UI_CinematicsMenu
  311. ===============
  312. */
  313. void UI_CinematicsMenu( void ) {
  314.     UI_CinematicsMenu_Init();
  315.     UI_PushMenu( &cinematicsMenuInfo.menu );
  316. }
  317.  
  318.  
  319. /*
  320. ===============
  321. UI_CinematicsMenu_f
  322. ===============
  323. */
  324. void UI_CinematicsMenu_f( void ) {
  325.     int        n;
  326.  
  327.     n = atoi( UI_Argv( 1 ) );
  328.     UI_CinematicsMenu();
  329.     Menu_SetCursorToItem( &cinematicsMenuInfo.menu, cinematicsMenuInfo.menu.items[n + 3] );
  330. }
  331.